package com.zenithmind.mall.pojo.vo;

import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券VO
 * 
 * @author ZenithMind Team
 * @since 2025-06-09
 */
@Data
public class CouponVO {

    /**
     * 优惠券ID
     */
    private String id;

    /**
     * 优惠券名称
     */
    private String name;

    /**
     * 优惠券描述
     */
    private String description;

    /**
     * 优惠券类型（1-满减券，2-折扣券，3-免邮券）
     */
    private Integer type;

    /**
     * 优惠券类型文本
     */
    private String typeText;

    /**
     * 优惠金额（满减券使用）
     */
    private BigDecimal discountAmount;

    /**
     * 折扣率（折扣券使用）
     */
    private BigDecimal discountRate;

    /**
     * 最低消费金额
     */
    private BigDecimal minAmount;

    /**
     * 最高优惠金额
     */
    private BigDecimal maxAmount;

    /**
     * 发放总数量
     */
    private Integer totalCount;

    /**
     * 已领取数量
     */
    private Integer receivedCount;

    /**
     * 已使用数量
     */
    private Integer usedCount;

    /**
     * 剩余数量
     */
    private Integer remainingCount;

    /**
     * 每人限领数量
     */
    private Integer limitPerUser;

    /**
     * 开始时间
     */
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 状态（0-禁用，1-启用）
     */
    private Integer status;

    /**
     * 状态文本
     */
    private String statusText;

    /**
     * 适用商品范围（0-全部商品，1-指定分类，2-指定商品）
     */
    private Integer applicableScope;

    /**
     * 适用商品ID列表
     */
    private String applicableProductIds;

    /**
     * 适用分类ID列表
     */
    private String applicableCategoryIds;

    /**
     * 排序值
     */
    private Integer sort;

    /**
     * 备注
     */
    private String remark;

    /**
     * 用户优惠券ID（用户查看时使用）
     */
    private String userCouponId;

    /**
     * 用户优惠券状态（用户查看时使用）
     */
    private Integer userCouponStatus;

    /**
     * 领取时间（用户查看时使用）
     */
    private LocalDateTime receiveTime;

    /**
     * 使用时间（用户查看时使用）
     */
    private LocalDateTime useTime;

    /**
     * 是否可用
     */
    private Boolean available;

    /**
     * 不可用原因
     */
    private String unavailableReason;

    /**
     * 状态名称
     */
    private String statusName;

    /**
     * 类型名称
     */
    private String typeName;

    /**
     * 是否过期
     */
    private Boolean expired;

    /**
     * 使用率
     */
    private Double usageRate;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 更新人
     */
    private String updateBy;
}
